package com.ym.core.utils.yunxin;

import com.ym.core.utils.MD5Util;
import org.springframework.util.Base64Utils;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;

/**
 * <简单描述>
 * <一句话描述>
 *
 * @author: 李涛
 * @version: 2019年06月05日 15:01
 */
public class YunXunApiUtil {

    //沙箱环境  http://api.ytx.net   http://sandbox.ytx.net
    private static final String SANDBOX = "http://sandbox.ytx.net";
    //用户账户
    private static final String ACCOUNTSID = "d4d7cd7a78254a39b9209dd06a872ff0";
    //用户账户授权令牌
    private static final String AUTHTOKEN = "30667bb0a6c840809e30a65af918f02e";
    //云通信API接口版本 目前可选版本
    private static final String VERSION = "201512";
    //功能所属分类call【语音类】/sms【消息类】/traffic【流量类】/account【账户类】 当前功能属：call
    private static final String FUNC = "call";
    //业务功能的各类具体操作分支 当前功能属
    private static final String FUNCURL = "DailbackCall.wx";
    //	云通信平台API接口，
    //	包头验证信息：base64加密(账户Id + "|" + 时间戳) 说明：时间戳有效时间为24小时
    //	格式"yyyyMMddHHmmss"，如：20140416142030
    private static final String Authorization = "";
    /*
     * 	云通信平台API接口，API 验证参数 ：MD5加密（账户Id + 账户授权令牌 +时间戳) *URL后必须带有Sign参数，
     * 	例如：Sign=AAABBBCCCDDDEEEFFFGGG *时间戳需与Authorization中时间戳相同 注:MD5加密32位,无论大小写
     */
    private static final String Sign = "";

    //API接口名称，默认值：callDailBack（区分大小写）
    public static final String ACTION = "callDailBack";
    /*
     *用户登录云通信平台后，所创建的应用的编号appid，若想调用当前模板短信接口，
     * 则此应用必须包含有模板短信功能，否则调用失败。c418a11b43a84cf89f8e3df77f89a857   f6cff1817dc0427db68f939501ee18ea
     */
    public static final String APPID = "f6cff1817dc0427db68f939501ee18ea";
    //	第一端号码
    private static final String SRC = "17688939197";
    //第一端外显号码
    public static final String SRCCLID = "01053189990";
    //第二端外显号码
    public static final String DSTCLID = "01053189990";
    //第二端号码
    private static final String DST = "18729871364";
    //通话时长限制，单位为秒，必须大于60
    private static final Long CREDIT =  60L;


    /***
     * Authorization 和签名生成
     * @return
     */
    public static Map<String,String> createAuthorizationAndSignUrl(){
        Date date = new Date();
        SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMddHHmmss");
        String timeStamp = dateFormat.format(date);
        Map<String,String> map = new HashMap<>();

        //Authorization
        StringBuilder builder = new StringBuilder();
        builder.append(ACCOUNTSID);
        builder.append("|");
        builder.append(timeStamp);
        String authorization = Base64Utils.encodeToString(builder.toString().getBytes());
        //System.out.println("authorization========="+authorization);

        //sign
        StringBuilder builder2 = new StringBuilder();
        builder2.append(ACCOUNTSID);
        builder2.append(AUTHTOKEN);
        builder2.append(timeStamp);
        String sign = MD5Util.hash(builder2.toString());

        StringBuilder url2 = new StringBuilder();
        url2.append(SANDBOX).append("/");
        url2.append(VERSION).append("/");
        url2.append("sid/");
        url2.append(ACCOUNTSID).append("/");
        url2.append(FUNC).append("/");
        url2.append(FUNCURL);
        url2.append("?Sign=").append(sign);
        String url = url2.toString();
        //System.out.println("sign================"+sign);
        map.put("authorization",authorization);
        //map.put("sign",sign);
        map.put("url",url);
        return map;
    }

}
